#include "board.h"
#include <rtthread.h> //这个和rt-thread的内核相关

/********************************************************************************/
/**********************LoRA线程的*************************/
rt_sem_t LoRA_sem = RT_NULL;
static void LoRA_thread_entry(void *parameter)
{
    while (1)
    {
        LoRA_Action();
    }
}
/********************************************************************************/

/**********************五路温度采集线程的*************************/
rt_sem_t ds18b20_sem = RT_NULL;
static void ds18b20_thread_entry(void *parameter)
{
    while (1)
    {
        DS18B20_Temp();
    }
}

/********************************************************************************/
/**********************电能采集线程的*************************/
rt_sem_t at7022_sem = RT_NULL;
static void at7022_thread_entry(void *parameter)
{
    while (1)
    {
        GetAT7022Data();
    }
}
/********************************************************************************/
/**********************LCD显示线程的*************************/
rt_mailbox_t lcd_mail = RT_NULL;          //指向邮箱对象的指针
static void lcd_thread_entry(void *parameter)
{
    while (1)
    {
        DispRefresh();
    }
}
/********************************************************************************/
/**********************除霜线程的*************************/
// static rt_thread_t defrost_thread = RT_NULL; //这个变量其实是一个指针(线程控制块)
// static void defrost_thread_entry(void *parameter)
// {
//     // while(1)
//     // {
//     //     rt_thread_delay(5000);
//     //     Defrost();
//     // }
// }
/********************************************************************************/

/**********************LED灯线程的*************************/
rt_mailbox_t led_mail = RT_NULL; //指向邮箱对象的指针
static void led_thread_entry(void *parameter)
{
    LED_RX_Action();
    LED_TX_Action();
    while (1)
    {
        LED_Action();
    }
}
/********************************************************************************/
/********************************************************************************/

/**
  * @brief  Main program.  main函数其实是一个主线程负责创建其他线程
  * @param  None	main线程最先被创建
  * @retval None
  */
int main(void)
{
    /****************************************************************************************/
    rt_thread_t LoRA_thread = RT_NULL; //这个变量其实是一个指针(线程控制块)
    LoRA_sem =
        rt_sem_create("LoRA_sem",
                      0,
                      RT_IPC_FLAG_FIFO);
    LoRA_thread =                           /*线程控制块指针*/
        rt_thread_create("LoRA",            /*线程名字*/
                         LoRA_thread_entry, /*线程入口函数(函数指针)*/
                         RT_NULL,           /*线程入口函数参数*/
                         512,               /*线程栈大小Byte*/
                         0,                 /*线程的优先级*/
                         20                 /*线程的时间片*/
        );
    if (LoRA_thread != RT_NULL)
    {
        rt_thread_startup(LoRA_thread);
    }
    else
    {
        return -1; //异常返回-1
    }
    /****************************************************************************************/

    /****************************************************************************************/
    rt_thread_t ds18b20_thread = RT_NULL; //这个变量其实是一个指针(线程控制块)
    ds18b20_sem =
        rt_sem_create("ds18b20_sem",
                      0,
                      RT_IPC_FLAG_FIFO);
    ds18b20_thread =                            /*线程控制块指针*/
        rt_thread_create("ds18b20",             /*线程名字*/
                         ds18b20_thread_entry, /*线程入口函数(函数指针)*/
                         RT_NULL,               /*线程入口函数参数*/
                         512,                   /*线程栈大小Byte*/
                         1,                     /*线程的优先级*/
                         20                     /*线程的时间片*/
        );
    if (ds18b20_thread != RT_NULL)
    {
        rt_thread_startup(ds18b20_thread);
    }
    else
    {
        return -1; //异常返回-1
    }
    /****************************************************************************************/

    /****************************************************************************************/
    rt_thread_t at7022_thread = RT_NULL; //这个变量其实是一个指针(线程控制块)
    at7022_sem =
        rt_sem_create("at7022_sem",
                      0,
                      RT_IPC_FLAG_FIFO);
    at7022_thread =                           /*线程控制块指针*/
        rt_thread_create("AT7022",            /*线程名字*/
                         at7022_thread_entry, /*线程入口函数(函数指针)*/
                         RT_NULL,             /*线程入口函数参数*/
                         512,                 /*线程栈大小Byte*/
                         2,                   /*线程的优先级*/
                         20                   /*线程的时间片*/
        );
    if (at7022_thread != RT_NULL)
    {
        rt_thread_startup(at7022_thread);
    }
    else
    {
        return -1; //异常返回-1
    }
    /****************************************************************************************/

    /****************************************************************************************/
    rt_thread_t lcd_thread = RT_NULL;  //这个变量其实是一个指针(线程控制块)
    lcd_mail =
        rt_mb_create("lcd_mail",
                     10,
                     RT_IPC_FLAG_FIFO);
    lcd_thread =                           /*线程控制块指针*/
        rt_thread_create("lcd",            /*线程名字*/
                         lcd_thread_entry, /*线程入口函数(函数指针)*/
                         RT_NULL,          /*线程入口函数参数*/
                         512,              /*线程栈大小Byte*/
                         3,                /*线程的优先级*/
                         20                /*线程的时间片*/
        );
    if (lcd_thread != RT_NULL)
    {
        rt_thread_startup(lcd_thread);
    }
    else
    {
        return -1; //异常返回-1
    }
    /****************************************************************************************/
    /****************************************************************************************/
    // defrost_thread =                           /*线程控制块指针*/
    //     rt_thread_create("defrost",            /*线程名字*/
    //                      defrost_thread_entry, /*线程入口函数(函数指针)*/
    //                      RT_NULL,              /*线程入口函数参数*/
    //                      512,                  /*线程栈大小Byte*/
    //                      8,                    /*线程的优先级*/
    //                      20                    /*线程的时间片*/
    //     );
    // if (defrost_thread != RT_NULL)
    // {
    //     rt_thread_startup(defrost_thread);
    // }
    // else
    // {
    //     return -1; //异常返回-1
    // }
    /****************************************************************************************/
    /****************************************************************************************/
    rt_thread_t led_thread = RT_NULL; //这个变量其实是一个指针(线程控制块)
    led_mail =
        rt_mb_create("ledmail",
                     2,
                     RT_IPC_FLAG_FIFO);
    led_thread =                           /*线程控制块指针*/
        rt_thread_create("LED",            /*线程名字*/
                         led_thread_entry, /*线程入口函数(函数指针)*/
                         RT_NULL,          /*线程入口函数参数*/
                         200,              /*线程栈大小Byte*/
                         4,                /*线程的优先级*/
                         20                /*线程的时间片*/
        );
    if (led_thread != RT_NULL)
    {
        rt_thread_startup(led_thread);
    }
    else
    {
        return -1; //异常返回-1
    }
    /****************************************************************************************/
}
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
